package cn.jdemo.sql.explain;

/**
 * 1 回表：对表内2次或以上索引查询称之为回表。
 *
 * 2 两次索引查询是怎么发生的的？
 * 例如，有一个x表,id字段是主键，a字段是辅助索引，总字段数量10个。
 *  sql如下：
 *      select * from x where id=100;
 *  这个语句只访问主键一次，不会回表。
 *  sql改为如下：
 *      select * from x where a=100;
 *  这个语句在访问辅助索引后还需要访问主键，因此是回表。
 *
 * 3 我们知道主键包含行所有数据（假设InnoDB），辅助索引只存储键值以及一个书签。这个SQL要取行所有数据，因此需要通过书签指向主键来读取全部行信息。
 *
 * 聚簇索引 : 叶子节点，存放整张表的行记录
 *     主键 / 唯一的非空索引  / 隐士定义主键
 *
 * 非聚簇索引/辅助索引 : 叶子节点，存放键值以及bookmarks
 *
 * 覆盖索引(innodb支持) : 原业务流程，通过辅助索引找主键，在通过主键找聚簇索引。覆盖索引，指避免索引回表查询。
 *
 * 避免的方法主要有2点：
 * 1.尽量使用主键
 * 2.如果必须使用辅助索引，那么尽量避免使用 *，直接列出所需列名。如果所需数据仅包含辅助索引列，那么它将不读取主键。
 *
 *
 *
 *
 * @description
 * @date 2021/3/25
 */
public class App {
}
